﻿namespace Core.Business.Domain.Entities {
    using System;
    using VfbSharp.Validations;
    using Core.Business.Domain.Exceptions;
    using System.Collections.Generic;
    using System.Linq;

    public class Categoria {
        public virtual int Id { get; set; }
        public virtual string Descricao { get; set; }
        public virtual IList<SubCategoria> SubCategorias { get; private set; }

        protected Categoria() { }
        public Categoria(string descricao) {
            if (descricao.IsNull()) throw new BusinessException("A descrição deve ser preenchida.");

            this.Descricao = descricao;
        }

        public virtual void AddSubCategoria(string descricao) { 
            this.SubCategorias = this.SubCategorias ?? new List<SubCategoria>();

            if (String.IsNullOrEmpty(descricao)) throw new BusinessException("Descrição inválida!");
            if (this.SubCategorias.Any(s => s.Descricao.Equals(descricao))) throw new BusinessException("A subcategoria já existe!");

            this.SubCategorias.Add(new SubCategoria(descricao, this));
        }
    }
}